11 - 2.6 IPC + Signale: sister [ID:23872]
50 von 68 angezeigt

Nun wollen wir uns noch anschauen, wie die nächste Aufgabe aufgebaut ist.

In der nächsten Aufgabe sollt ihr die Sista implementieren.

Bei der Sista handelt es sich um einen einfachen HTTP Server, der das HTTP-Protokoll spricht,

um HTML Seiten auszuliefern.

Diese befinden sich in einem www-Pfad, aus dem nicht ausgebrochen werden darf.

Die Abarbeitung der HTTP-Anfragen erfolgt dabei jeweils in einem eigenen Prozess.

Das bedeutet, die Sista folgt sich für jede eingehende Verbindung.

Was ihr dabei lernen sollt, ist zum einen, wie man mit der Netzwerkkommunikation auf

Serverseite zurechtkommt und wie man modulare Software schreibt.

Die Sista besteht nämlich aus einzelnen Modulen, die unabhängig voneinander wiederverwendet

werden können.

Teile der Sista werden in einer späteren Aufgabe, der Mother, wiederverwendet bzw. ersetzt.

Da die Modularisierung in der Sista ein wesentlicher Teil ist, wollen wir uns nochmal genauer anschauen,

was ein Modul in C ist.

In C besteht ein Modul einmal aus der öffentlichen Schnittstelle.

Das ist die Header-Datei, die andere C-Module inkludieren können, um auf die Funktionen

des Moduls zuzugreifen.

Die konkrete Implementierung dieser Schnittstelle befindet sich in der C-Datei.

Hier muss man darauf achten, dass alles, was öffentlich verfügbar ist, als extern deklariert

ist, wobei dies im Fall von Funktionen immerzu der Fall ist, wenn nicht anders angegeben.

Gleichzeitig muss man darauf achten, dass alle Symbole, die in der C-Datei definiert

werden und nicht Teil der öffentlichen Schnittstelle sind, geheim bleiben.

Dies wird sichergestellt, indem man sie als static deklariert, z.B. statisch-globale

Variablen oder statische Funktionen.

Damit wird die Trennung der öffentlich sichtbaren Schnittstelle und der privaten Daten durchgesetzt.

Die weitere Trennung zwischen einer Header-Datei, in der die öffentliche Schnittstelle definiert

ist und der konkreten Implementierung, ermöglicht es, dass man die Implementierung austauschen

kann.

Und zwar ohne, dass man andere Module, die die öffentliche Schnittstelle nutzen, anpassen

müsste.

Das bedeutet aber auch, dass, wenn man eine konkrete Implementierung austauscht, man

alle Module, die zusammengehören, erneut linken muss, um ein ausführbares Programm

zu erhalten, das die neue Implementierung beinhaltet.

Die alten Module, die gegen die Schnittstelle gebaut sind, müssen aber nicht erneut kompiliert

werden.

Also schauen wir uns mal die einzelnen Module an, die ihr implementieren müsst.

Wir haben zum einen die Sista.c.

Hier ist die Main-Funktion.

Sie ist dafür verantwortlich, alle weitere Module zu initialisieren und die Interprozesskommunikation

in Form von Sockets aufzubauen.

Anschließend nimmt sie einzelne Verbindungen an und übergibt diese an das jeweils dafür

zuständige Modul.

Ein weiteres Modul ist das Verbindungsmodul in der Datei connection-fork.c.

Dieses Modul implementiert die Schnittstelle aus der Datei connection.h.

Hier wird zum einen das Anfrage-Modul initialisiert und für jede Verbindung, die es zugestellt

bekommt, wird ein eigener Kind-Prozess gestartet.

Dabei wird auch sichergestellt, dass jeder Kind-Prozess determiniert aufgeräumt wird.

Sobald ein Kind-Prozess erstellt wurde, der die jeweilige Anfrage bearbeiten kann, wird

die Anfrage weiter an das Anfrage-Modul gereicht.

Das Anfrage-Modul wird in der Datei request-http.c implementiert und richtet sich nach der Schnittstelle

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:04:57 Min

Aufnahmedatum

2020-11-15

Hochgeladen am

2020-11-15 19:39:16

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen